home *** CD-ROM | disk | FTP | other *** search
- /*
- Recording Animation in Binary Order for Progressive Temporal Refinement
- by Paul Heckbert
- from "Graphics Gems", Academic Press, 1990
- */
-
- /*
- * binrec.c: demonstrate binary recording order
- * Paul Heckbert Jan 90
- */
-
- #include <stdio.h>
- main(ac, av)
- int ac;
- char **av;
- {
- int nframes, i, start_frame, repeat_count;
- if (ac!=2) {
- fprintf(stderr, "Usage: binrec <nframes>\n");
- exit(1);
- }
- nframes = atoi(av[1]);
-
- printf("step startframe repeatcount\n");
- for (i=0; i<nframes; i++) {
- inside_out(nframes, i, &start_frame, &repeat_count);
- printf(" %2d %2d %2d\n", i, start_frame, repeat_count);
- }
- }
-
- /*
- * inside_out: turn a number "inside-out": a generalization of bit-
- * reversal.
- * For n = power of two, this is equivalent to bit-reversal.
- *
- * Turn the number a inside-out, yielding b. If 0<=a<n then 0<=b<n.
- * Also return r = min(n-b, largest power of 2 dividing b)
- */
- inside_out(n, a, b, r)
- int n, a, *b, *r;
- {
- int k, m;
- *r = m = n;
- for (*b=0, k=1; k<n; k<<=1)
- if (a<<1>=m) {
- if (*b==0) *r = k;
- *b += k;
- a -= m+1>>1;
- m >>= 1;
- }
- else m = m+1>>1;
- if (*r>n-*b) *r = n-*b;
- }
-